// 引用所需的库
use std::io::{self, Write};
use std::vec::Vec;

///
/// # Author
/// noear
///
/// # Version
/// since 2.0
// CodecWriter trait 定义
use std::io::Result; // 用于处理I/O操作的Result类型

/**
 * 编解码缓冲写
 *
 * Java中的接口在Rust中通常用trait表示
 * 这里的trait名`CodecWriter`保持一致
 */
pub trait CodecWriter {
    /**
     * 推入一组 byte
     *
     * 在Rust中使用Result处理可能的I/O错误
     */
    fn put_bytes(&mut self, bytes: &[u8]) -> Result<()>;

    /**
     * 推入 int
     *
     * Java的int对应Rust的i32
     */
    fn put_int(&mut self, val: i32) -> Result<()>;

    /**
     * 推入 char
     *
     * 在Rust中char是4字节的Unicode字符，使用u8数组来表示char也常见
     */
    fn put_char(&mut self, val: char) -> Result<()>;

    /**
     * 冲刷
     *
     * 用于确保所有数据已写入底层流
     */
    fn flush(&mut self) -> Result<()>;
}